<template>
  <!--组织机构树-->
  <BasicTree
    v-if="!treeReloading && userIdentity === '2'"
    ref="treeElRef"
    title="部门列表"
    toolbar
    search
    showLine
    :api="loadDepartTreeData"
    :checkStrictly="true"
    :clickRowToExpand="false"
    :treeData="treeData"
    :selectedKeys="selectedKeys"
    :expandedKeys="expandedKeys"
    :autoExpandParent="autoExpandParent"
    @select="onSelect"
    @expand="onExpand"
    @search="onSearch"
  />
  <a-empty v-else description="普通员工无此权限" />
</template>

<script lang="ts" setup>
  import { inject, nextTick, ref } from "vue"
  import { useMessage } from "/@/hooks/web/useMessage"
  import { BasicTree } from "/@/components/Tree"
  import { listMyDeptTree, searchByKeywords } from "../depart.user.api"

  const prefixCls = inject("prefixCls")
  const emit = defineEmits(["select"])
  const { createMessage } = useMessage()

  let loading = ref<boolean>(false)
  // 部门树列表数据
  let treeData = ref<any[]>([])
  // 当前展开的项
  let expandedKeys = ref<any[]>([])
  // 当前选中的项
  let selectedKeys = ref<any[]>([])
  // 是否自动展开父级
  let autoExpandParent = ref<boolean>(true)
  // 用户身份
  let userIdentity = ref<string>("2")
  // 树组件重新加载
  let treeReloading = ref<boolean>(false)
  const searchKeyWord = ref<string>("")
  const treeElRef = ref<any>()
  // 加载部门信息
  const loadDepartTreeData = async () => {
    loading.value = true
    treeData.value = []
    const data = await listMyDeptTree({ deptName: searchKeyWord.value, myDeptSearch: "1" })
    if (Array.isArray(data)) {
      treeData.value = data
      // userIdentity.value = res.message
      userIdentity.value = "2"
      autoExpandParentNode()
    }
    return data
  }

  // 自动展开父节点，只展开一级
  function autoExpandParentNode() {
    let keys: Array<any> = []
    treeData.value.forEach((item, index) => {
      if (item.children && item.children.length > 0) {
        keys.push(item.key)
      }
      if (index === 0) {
        // 默认选中第一个
        setSelectedKey(item.id, item)
      }
    })
    if (keys.length > 0) {
      expandedKeys.value = keys
    }
  }

  /**
   * 设置当前选中的行
   */
  function setSelectedKey(key: string, data?: object) {
    selectedKeys.value = [key]
    if (data) {
      emit("select", data)
    }
  }

  // 搜索事件
  function onSearch(value: string) {
    searchKeyWord.value = value
    treeElRef.value && treeElRef.value.reload()
  }

  // 树选择事件
  function onSelect(selKeys, event) {
    if (selKeys.length > 0 && selectedKeys.value[0] !== selKeys[0]) {
      setSelectedKey(selKeys[0], event.selectedNodes[0].props)
    } else {
      // 这样可以防止用户取消选择
      setSelectedKey(selectedKeys.value[0])
    }
  }

  // 树展开事件
  function onExpand(keys) {
    expandedKeys.value = keys
    autoExpandParent.value = false
  }
</script>
